package com.example.crm.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 合同实体类
 */
@Data
@TableName("crm_contract")
public class Contract {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 合同编号
     */
    private String contractNo;

    /**
     * 合同名称
     */
    private String name;

    /**
     * 客户ID
     */
    private Long customerId;

    /**
     * 销售机会ID
     */
    private Long opportunityId;

    /**
     * 联系人ID
     */
    private Long contactId;

    /**
     * 负责人ID
     */
    private Long managerId;

    /**
     * 合同金额
     */
    private BigDecimal amount;

    /**
     * 签订日期
     */
    private LocalDateTime signDate;

    /**
     * 开始日期
     */
    private LocalDateTime startDate;

    /**
     * 结束日期
     */
    private LocalDateTime endDate;

    /**
     * 合同类型（1-新签，2-续签，3-补充协议）
     */
    private Integer type;

    /**
     * 付款方式（1-一次性付款，2-分期付款，3-月付，4-季付，5-年付）
     */
    private Integer paymentType;

    /**
     * 合同状态（0-草稿，1-审核中，2-执行中，3-完成，4-取消）
     */
    private Integer status;

    /**
     * 合同文件路径
     */
    private String filePath;

    /**
     * 合同内容
     */
    private String content;

    /**
     * 付款说明
     */
    private String paymentTerms;

    /**
     * 其他条款
     */
    private String otherTerms;

    /**
     * 备注
     */
    private String remarks;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 逻辑删除标记（0-未删除，1-已删除）
     */
    @TableLogic
    private Integer deleted;

    /**
     * 客户名称（非数据库字段）
     */
    @TableField(exist = false)
    private String customerName;

    /**
     * 销售机会名称（非数据库字段）
     */
    @TableField(exist = false)
    private String opportunityName;

    /**
     * 联系人名称（非数据库字段）
     */
    @TableField(exist = false)
    private String contactName;

    /**
     * 负责人姓名（非数据库字段）
     */
    @TableField(exist = false)
    private String managerName;

    /**
     * 合同类型名称（非数据库字段）
     */
    @TableField(exist = false)
    private String typeName;

    /**
     * 付款方式名称（非数据库字段）
     */
    @TableField(exist = false)
    private String paymentTypeName;

    /**
     * 合同状态名称（非数据库字段）
     */
    @TableField(exist = false)
    private String statusName;
} 